/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persona;

import Congresos.Congreso;
import Congresos.Trabajo;
import java.util.ArrayList;
import java.io.Serializable;
import java.util.Scanner;
import java.util.GregorianCalendar;

/**
 *
 * @author alejandro.suarez3
 */
// un paquete deberia llevar la clase trabajo y autor y el otro paquete el resto
public class Ponente implements Serializable {

    private String nombre;
    private String dni;
    private String pasword;
    private String afiliacion;
    private String direccion;
    private String correoElectronico;
    private ArrayList<Trabajo> trabajos;
    private Congreso congreso;

    public Ponente(String nombre, String dni, String pasword,String afiliacion,String direccion,String correoElectronico) {
        setDni(dni);
        setNombre(nombre);
        setPasword(pasword);
        setAfiliacion(afiliacion);
        setDireccion(direccion);
        setCorreoElectronico(correoElectronico);
        trabajos = new ArrayList<Trabajo>();
        congreso = null;
    }

    public Ponente(String nombre, String dni, String pasword, ArrayList<Trabajo> trabajos, Congreso congreso,String afiliacion,String direccion,String correoElectronico) {
        setDni(dni);
        setNombre(nombre);
        setPasword(pasword);
        setAfiliacion(afiliacion);
        setDireccion(direccion);
        setCorreoElectronico(correoElectronico);
        this.trabajos = new ArrayList<Trabajo>();
        darAltaTrabajo(trabajos);
        setCongreso(congreso);
    }

    public String getAfiliacion() {
        return afiliacion;
    }

    public void setAfiliacion(String afiliacion) {
        this.afiliacion = afiliacion;
    }

    public String getCorreoElectronico() {
        return correoElectronico;
    }

    public void setCorreoElectronico(String correoElectronico) {
       if (correoElectronico.contains("@")) {
            this.correoElectronico = correoElectronico;
        } else {
            this.correoElectronico = "";
            System.out.println("El correo electronico es incorrecto");
        }
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public String getPasword() {
        return pasword;
    }

    public void setPasword(String pasword) {
        this.pasword = pasword;
    }

    public void setCongreso(Congreso congreso) {
        this.congreso = congreso;
    }

    public Congreso getCongreso() {
        return congreso;
    }

    public void setDni(String dni) {
        this.dni = dni;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getDni() {
        return dni;
    }

    public String getNombre() {
        return nombre;
    }

    public ArrayList<Trabajo> getTrabajos() {
        return (ArrayList<Trabajo>) trabajos.clone();
    }

    public void darAltaTrabajo(ArrayList<Trabajo> trabajos) {

        for (int j = 0; j < trabajos.size(); j++) {
            darAltaTrabajo(trabajos.get(j));
        }
    }

    public void darAltaTrabajo(Trabajo trabajo) {

        GregorianCalendar fecha = new GregorianCalendar();
        if (congreso.getFechaFinalPonente().after(fecha)) {
            /*Como congreso contiene todos los trabajos de todos los ponentes comprobamos que no existan 
            dos titulos iguales para un mismo trabajo asi nos ahorramos la comprobacion en el propio ponente*/
            if (congreso.darAltaTrabajo(trabajo) == 0) {
                trabajos.add(trabajo);
                trabajo.setPonente(this);
                System.out.println("El trabajo a sido dado de alta correctamente");
            }
        } else {
            System.out.println("La fecha para dar de alta los trabajos a finalizado");
        }
    }

    public void modificarContenidoTrabajo(String titulo, String fichero) {

        int chequeo = 0;
        GregorianCalendar fecha = new GregorianCalendar();
        if (congreso.getFechaFinalPonente().after(fecha)) {
            for (int i = 0; i < trabajos.size(); i++) {
                if (trabajos.get(i).getTitulo().equals(titulo)) {
                    trabajos.get(i).setFichero(fichero);
                    congreso.modificarContenidoTrabajo(titulo, fichero);
                    chequeo = 1;
                    break;
                }

            }
            if (chequeo == 0) {
                System.out.println("El titulo es incorrecto");
            }
        } else {
            System.out.println("La fecha para modificar los trabajos a finalizado");
        }




    }

    public void modificarContenidoTrabajo(Trabajo trabajo, String titulo) {
        GregorianCalendar fecha = new GregorianCalendar();
        if (congreso.getFechaFinalPonente().after(fecha)) {
            if (congreso.modificarContenidoTrabajo(trabajo, titulo) == 0) {
                for (int i = 0; i < trabajos.size(); i++) {
                    if (trabajos.get(i).getTitulo().equals(titulo)) {
                        trabajos.get(i).setSubTematicas();           //Borramos el array de subtematicas
                        trabajos.get(i).setResumen(trabajo.getResumen());
                        trabajos.get(i).setTematica(trabajo.getTematica());
                        trabajos.get(i).setTitulo(trabajo.getTitulo());
                        trabajos.get(i).setSubTematicas(trabajo.getSubTematicas());
                        trabajos.get(i).setUsuarios(trabajo.getUsuarios());
                        break;
                    }

                }
            }
        }
    }

    public void darBajaTrabajo() {
        if (trabajos.size()>0){
        int opcion;
        Scanner sc = new Scanner(System.in);
        System.out.println("Indique cual es el trabajo que quiere eliminar");
        GregorianCalendar fecha = new GregorianCalendar();
        if (congreso.getFechaFinalPonente().after(fecha)) {
            for (int i = 0; i < trabajos.size(); i++) {
                System.out.println("Pulse un " + i + " si quiere eliminar el trabajo con titulo " + trabajos.get(i).getTitulo());
            }
            opcion = sc.nextInt();
            congreso.darBajaTrabajo(trabajos.get(opcion));
            for (int j=0;j<congreso.getRevisores().size();j++){
                congreso.getRevisores().get(j).darBajaTrabajo(trabajos.get(opcion));
            }
            trabajos.get(opcion).setPonente(null);
            trabajos.remove(opcion);
          

        } else {
            System.out.println("La fecha para modificar los trabajos a finalizado");
        }

        }
        else{
            System.out.println("Este ponente no tiene trabajos");
        }

    }

    public void obtenerTrabajos() {

        System.out.println("Lista de trabajos de " + this.nombre);
        for (int i = 0; i < trabajos.size(); i++) {
            System.out.println("Id " + i + " Titulo " + trabajos.get(i).getTitulo());
        }
    }

    public void obtenerTrabajos(int id) {

        if (id < trabajos.size()) {
                congreso.imprimirTrabajos(trabajos.get(id));
        } else {
            System.out.println("El Id es incorrecto");
        }

    }
}
